#include "list.h"

bool Init(List* p_list)
{
    p_list=(List*)malloc(sizeof(List));
    if(!p_list)
    {
        printf("init list failed!\n");
        return false;
    }

    p_list->next=NULL;
    return true;
}

bool IsEmpty(const List* p_list)
{
    if(!p_list->next)
    {
        return false;
    }
    return true;
}

void Clear(List* p_list)
{
    List* temp;
    temp=p_list;

    while(!temp)
    {
        p_list=p_list->next;
        free(temp);
        temp=p_list;
    }
}

bool GetElement(const List* p_list,int index,int* value)
{
    List* temp;
    temp=p_list;

    int i=0;
    while(temp&&i<index)
    {
        temp=temp->next;
        ++i;
    }

    bool result=true;
    if(temp)
    {
        *value=temp->data;
    }
    else
    {
        result=false;
    }
    return result;
}

bool Find(const List* p_list,int value)
{
    List* temp;
    temp=p_list;
    
    bool result=false;

    while(p_list)
    {
        if(p_list->data==value)
        {
            result=true;
            break;
        }
    }

    return result;
}

void Insert(List* p_list,int value)
{
    List* temp=(List*)malloc(sizeof(List));
    if(!temp)
    {
        printf("insert data failed when malloc memory!\n");
        return;
    }
    temp->data=value;

    temp->next=NULL;

    List* last=p_list;
    while(last)
    {
        last=last->next;
    }

    last=temp;
}

void Delete(List* p_list,int value)
{
    List* temp=p_list;
    List* p;
    while(temp->next)
    {
        p=temp->next;
        if(temp->next->data==value)
        {
            
            temp->next=p->next;
            free(p);
        }
        temp=p;
    }
}

int Length(const List* p_list)
{
    int length=0;

    List* temp=p_list;
    while(temp)
    {
        ++length;
    }

    return length;
}